package com.example.design.创建型设计模式.单例模式;

import lombok.Getter;
import lombok.Setter;
import lombok.ToString;

@Getter
@Setter
@ToString
public class Singleton {
    private String name;

    private String description;

    // 静态变量属于类而不是对象，所以它在整个程序运行期间只有一份内存，因此能确保只有一个实例存在
    private static Singleton instance;

    // 私有构造方法，外部类无法直接实例化该类，只能通过类内部的静态方法来获取其唯一实例
    private Singleton() {
        // 私有构造函数，防止外部实例化
    }

    // 提供一个全局访问点
    // 懒汉式单例, 这种方式在需要时才创建实例，有可能在多线程环境下出现问题（非线程安全）
    public static Singleton getInstance() {
        if (instance == null) {
            instance = new Singleton();
        }
        return instance;
    }

}

// 单例模式的优点： 1. 减少内存开销和资源消耗， 2. 减少创建对象的数量， 3. 减少系统资源的消耗， 4. 一个类全局只有一个实例， 5. 允许可变的配置信息。
/*
1. 静态变量：单例模式通常会利用一个静态变量来保存该类的唯一实例，因为静态变量属于类而不是对象，所以它在整个程序运行期间只有一份内存，因此能确保只有一个实例存在。

2. 私有构造方法：单例模式的类通常会将其构造方法设置为私有的，这样外部类无法直接实例化该类，只能通过类内部的静态方法来获取其唯一实例。

3. 延迟实例化：单例模式通常采用延迟实例化的方式，在第一次请求获取单例实例时才进行实例化操作，然后将实例保存起来并在后续的请求中直接返回这个实例。这样可以避免在程序启动时就创建实例，减少系统的开销。
*/